#include <iostream>
#include <cstring>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include "comm.hpp"

int main()
{
    key_t key = GetKey();
    std::cout << "key : " << ToHex(key) << std::endl;
    sleep(3);
    // key vs shmid
    // shmid: 应用这个共享内存的时候，我们使用shmid来进行操作共享内存， FILE*
    // key: 不要在应用层使用，只用来在内核中标识shm的唯一性！， fd
    int shmid = CreateShm(key);

    sleep(5);

    std::cout << "shmid: " << shmid << std::endl;
    std::cout << "开始将shm映射到进程的地址空间中" << std::endl;
    char *s = (char*)shmat(shmid, nullptr, 0);

    sleep(5);
    shmdt(s);
    std::cout << "开始将shm从进程的地址空间中移除" << std::endl;

    sleep(5);
    shmctl(shmid, IPC_RMID, nullptr);
    std::cout << "开始将shm从OS中删除" << std::endl;

    sleep(10);
    return 0;
}